package com.hzbank.juc.review;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * @description:
 * @author: libugu@cskaoyan.com
 * @date 2023/12/26 - 18:39
 */
@Slf4j
public class Test003 {
    private Thread thread;
    public void start(){
        thread = new Thread(() -> {
            while(true) {
                Thread current = Thread.currentThread();
                // 打断正在执行的
                if(current.isInterrupted()) {
                    log.debug("料理后事");

                    break;
                }
                try {
                    Thread.sleep(1000);
                    log.debug("将结果保存");
                } catch (InterruptedException e) {
                    // current.interrupt();  不是原子操作，可能被其他线程打断
                    // 因为捕获异常后，会清除打断标记，所以才有重新加上打断标记的操作
                    // 那么，如果重新标记这个操作被打断了，current的打断标记还是false
                    // 循环则不会被打断
                    log.debug("老子睡觉被打断，打断状态：{}",current.isInterrupted());
                    current.interrupt();

                }
                // 执行监控操作
            }
        },"监控线程");
        thread.start();
    }
    public void stop() {
        thread.interrupt();
    }

    public static void main(String[] args) throws InterruptedException {
        Test003 t = new Test003();
        t.start();

        Thread.sleep(3500);
        log.debug("stop");
        t.stop();
    }
}
